﻿#include <stdio.h>
#include <conio.h>
#include <malloc.h>

struct node
{
	struct node *left;
	int data;
	struct node *right;
};

void main()
{
	void insert(struct node **,int);
	void inorder(struct node *);
	void postorder(struct node *);
	void preorder(struct node *);

	struct node *ptr;
	int no,i,num;

	ptr = NULL;

	printf("\nProgram for Tree Traversal\n");
	printf("Enter the number of nodes to add to the tree.<BR>\n");
	scanf("%d",&no);

	for(i=0;i<no;i++)
	{
		printf("Enter the item\n");
		scanf("%d",&num);
		insert(&ptr,num);
	}

	printf("\nINORDER TRAVERSAL\n");
	inorder(ptr);

	printf("\nPREORDER TRAVERSAL\n");
	preorder(ptr);

	printf("\nPOSTORDER TRAVERSAL\n");
	postorder(ptr);

	getch();
}

void insert(struct node **p,int num)
{
	if((*p)==NULL)
	{
		printf("Leaf node created.");
		(*p) = (node *)malloc(sizeof(struct node));
		(*p)->left = NULL;
		(*p)->right = NULL;
		(*p)->data = num;
		return;
	}
	else
	{
		if(num==(*p)->data)
		{
			printf("\nREPEATED ENTRY ERROR VALUE REJECTED\n");
			return;
		}
		if(num<(*p)->data)
		{
			printf("\nDirected to left link.\n");
			insert(&((*p)->left),num);
		}
		else
		{
			printf("Directed to right link.\n");
			insert(&((*p)->right),num);
		}
	}
	return;
}

void inorder(struct node *p)
{
	if(p!=NULL)
	{
		inorder(p->left);
		printf("\nData :%d",p->data);
		inorder(p->right);
	}
	else
		return;
}

void preorder(struct node *p)
{
	if(p!=NULL)
	{
		printf("\nData :%d",p->data);
		preorder(p->left);
		preorder(p->right);
	}
	else
		return;
}

void postorder(struct node *p)
{
	if(p!=NULL)
	{
		postorder(p->left);
		postorder(p->right);
		printf("\nData :%d",p->data);
	}
	else
		return;
}